<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>高阶函数柯里化</title>
</head>

<body>

    <div id="test" />
    <script type="text/javascript"
        src="https://lf26-cdn-tos.bytecdntp.com/cdn/expire-1-M/react/18.2.0/umd/react.production.min.js"></script>
    <script type="text/javascript"
        src="https://lf3-cdn-tos.bytecdntp.com/cdn/expire-1-M/react-dom/18.2.0/umd/react-dom.production.min.js"></script>
    <script type="text/javascript"
        src="https://lf9-cdn-tos.bytecdntp.com/cdn/expire-1-M/babel-standalone/6.26.0/babel.min.js"></script>

    <script type="text/babel">
        //#region
        /**
        高阶函数: 如果一个函数符合下面2个规范中的任何一个,那该函数是高阶函数
            1.若A函数,,接收的参数是一个函数,那么A就可以称之为高阶函数
            2.若A函数,调用的返回值依然是一个函数,那么A就可以称之为高阶函数.
            函数的柯里化: 通过函数调用继续返回函数的方式,实现多次接收参数最后统一处理的函数编码形式. 
         */
        //#endregion
        class Logon extends React.Component {
            // 数据维护到状态中,,
            state = {
                uname: '',  // 用户名
                pwd: ''    // 密码
            }
            // 表单提交的回调
            handleSubmit = (event) => {
                event.preventDefault() // 阻止表单提交
                const { uname, pwd } = this.state
                console.info(`你输入的用户名是: ${uname}, 你输入的密码是: ${pwd}`)
            }
            // 保存表单数据到状态中
            saveFormData = (dataType) => {
                return (event)=>{
                    // console.log(inputName, event.target.value)
                    this.setState({[dataType]: event.target.value})
                }
              
            }
          
            render() {
                return (
                    <form onSubmit={this.handleSubmit}>
                        用户名: <input onChange={this.saveFormData('uname')} type="text" name="username" />
                        密码: <input onChange={this.saveFormData('pwd')} type="password" name="password" />
                        <button>登录</button>
                    </form>
                )
            }
        }
        ReactDOM.render(<Logon />, document.getElementById("test"))
    </script>
</body>

</html>